<?php

	/**
	 * Annyival több a SiteGroup objektumnál, hogy ez még a nyelvfüggő részeket is magába húzza
	 *
	 */
	class ExtendedSiteGroup extends SiteGroup {

		
		/**
		 * Nyelvkóddal kulcsolt asszociatív tömb benne a nevekkel az adott nyelven
		 *
		 * @var array
		 */
		public $names;
		
		
		public function ExtendedSiteGroup($_id, $_langcode, $_name, $_isHidden = false, $_isNewRecord = false)
		{
			parent::SiteGroup($_id, $_langcode, $_name, $_isHidden);
			
			$this->initNamesArray($_isNewRecord);
		}
		
		
		public function initNamesArray($skipInconsistencyError = false)
		{
			$this->names = array();
			
			// összes system nyelv
			$allLangs = SiteGroupHandler::getAllSysLanguageCodes();
			
			// rekordok
			$groupRecs = AdminDBHelper::getSiteGroupsById($this->id);
			if(!is_null($groupRecs))
			{
				foreach($groupRecs as $groupRec)
				{
					$this->names[$groupRec['langcode']] = $groupRec['name'];
					$allLangs = FunctionLibrary::arrayRemove($allLangs, $groupRec['langcode']);
				}
				
				// oké, na most ha van maradék a nyelv-tömben, akkor az egyrészt db ionkonzisztenciára
				// utal, másrészt ki kell pótolnunk a rekordot...
				if(count($allLangs) > 0)
				{
					if(!$skipInconsistencyError)
					{
						$msg = "db inconsistency found! site_group id=$this->id has missing languages: ".implode(", ", $allLangs);
						Log::warn($msg);
						MailHelper::sendAdminMail("db inconsistency found!", $msg);
						
						$fillName = null;
					}
					else
					{
						// ez akkor van, amikor db insert-hez készül elő a rekord
						$fillName = $this->name;
					}
						
					foreach($allLangs as $langcode)
					{
						$this->names[$langcode] = $fillName;
					}
				}
			}
			else
			{
				$msg = "failed to init ExtendedSiteGroup names array due to db error!";
				Log::error($msg);
			}
		}
		
		
		
		public function __toString()
		{
			$lng = "??";
			$name = "null";
			
			if(!is_null($this->name))
			{
				$name = $this->name;
				$lng = $this->langcode;
			}
			else
			{
				foreach($this->names as $langcode => $_name)
				{
					$lng = $langcode;
					$name = $_name;
					
					break;
				}
			}
			
			return "ExtendedSiteGroup (id=$this->id, name=\"$name ($lng)\")";
		}
		
		
		
		/**
		 * A site_group db rekordból készít egy ExtendedSiteGroup objektumot és visszaadja azt
		 *
		 * @param array $siteGroupRecord
		 * @return ExtendedSiteGroup
		 */
		public static function createFromDBRecord($siteGroupRecord)
		{
			$siteGroup = SiteGroup::createFromDBRecord($siteGroupRecord);
			return ExtendedSiteGroup::createFromSiteGroup($siteGroup);
		}

		
		/**
		 * A SiteGroup objektumból készít egy ExtendedSiteGroup objektumot és visszaadja azt
		 *
		 * @param SiteGroup $siteGroup
		 * @return ExtendedSiteGroup
		 */
		public static function createFromSiteGroup($siteGroup)
		{
			return new ExtendedSiteGroup($siteGroup->id, $siteGroup->langcode, $siteGroup->name, $siteGroup->isHidden);
		}
		
	}
?>